<?php
// +----------------------------------------------------------------------
// | RXThinkCMF框架 [ RXThinkCMF ]
// +----------------------------------------------------------------------
// | 版权所有 2017~2020 南京RXThinkCMF研发中心
// +----------------------------------------------------------------------
// | 官方网站: http://www.rxthink.cn
// +----------------------------------------------------------------------
// | Author: 牧羊人 <1175401194@qq.com>
// +----------------------------------------------------------------------

namespace app\admin\widget;


use think\facade\View;
use think\template\TagLib;

/**
 * 文件上传
 * @author 牧羊人
 * @since 2020/7/2
 * Class Upload
 * @package app\admin\taglib
 */
class Upload extends TagLib
{
    // 自定义标签列表
    protected $tags = [
        'image' => ['attr' => 'name', 'close' => 0],
        'album' => ['attr' => 'name', 'close' => 0],
        'file' => ['attr' => 'name', 'close' => 0],
    ];

    /**
     * 图片上传及裁剪
     * @param $tag 标签参数
     * @return string
     * @author 牧羊人
     * @since 2020/7/2
     */
    public function tagImage($tag)
    {
        // 取消模板布局
        app()->view->layout(false);
        // 组件参数
        $param = trim($tag['name']);
        // 参数解析
        $item = explode('|', $param);
        // 组件名称
        $name = $item[0];
        // 特殊情况处理
        if (strpos($name, "__") !== false) {
            $nameArr = explode("__", $name);
            $name = "<?php echo $nameArr[0]?>" . "__" . $nameArr[1];
        }
        // 组件按钮标题
        $title = $item[1] ? $item[1] : "图片";
        // 上传框显示尺寸
        $size = $item[2] ? $item[2] : "90x90";
        $sizeArr = explode("x", $size);
        // 提示语
        $showTips = $item[3];
        // 裁剪尺寸
        $cropSize = isset($item[4]) ? $item[4] : '300x300';
        // 是否开启裁剪
        $isCrop = isset($item[4]) ? 1 : 2;
        // 计算长宽比例
        $cropArr = explode('x', $cropSize);
        // 裁剪比例
        $cropRate = $cropArr[0] / $cropArr[1];
        // 上传后缀
        $exts = isset($tag['exts']) ? trim($tag['exts']) : "jpg|png|gif|bmp|jpeg";
        // 上传文件大小
        $size = isset($tag['size']) ? $tag['size'] : 10 * 1024;
        // 组件值
        $value = $tag['value'];

        // 绑定数据源
        View::assign("name", $name);
        View::assign("title", $title);
        View::assign("imgUrl", "<?php echo ($value)!='' ? " . $value . " : '/static/admin/assets/images/default_upload.png' ?>");
        View::assign("imgHidden", "<?php echo ($value)!='' ? " . $value . " : '' ?>");
        View::assign("imgWidth", $sizeArr[0]);
        View::assign("imgHeight", $sizeArr[1]);
        View::assign("showTips", $showTips);
        View::assign('cropWidth', $cropArr[0]);
        View::assign('cropHeight', $cropArr[1]);
        View::assign('cropRate', "{$cropRate}/1");
        View::assign('isCrop', $isCrop);
        View::assign("imgExts", $exts);
        View::assign('imgSize', $size);
        // 渲染模板
        return View::fetch("widget/upload/image");
    }

    /**
     * 图集相册上传组件
     * @param $tag 标签参数
     * @return string
     * @author 牧羊人
     * @since 2020/7/4
     */
    public function tagAlbum($tag)
    {
        // 取消模板布局
        app()->view->layout(false);
        // 组件参数
        $param = trim($tag['name']);
        // 参数解析
        $item = explode('|', $param);
        // 组件名称
        $albumName = $item[0];
        // 特殊情况处理
        if (strpos($albumName, "__") !== false) {
            $nameArr = explode("__", $albumName);
            $albumName = "<?php echo $nameArr[0]?>" . "__" . $nameArr[1];
        }

        // 组件按钮标题
        $albumTitle = $item[1] ? $item[1] : "图片";
        // 上传框显示尺寸
        $size = $item[2] ? $item[2] : "90x90";
        $sizeArr = explode("x", $size);
        // 最大上传张数
        $albumNum = $item[3];
        // 提示语
        $albumTips = $item[4];
        // 裁剪尺寸
        $cropSize = isset($item[5]) ? $item[5] : '300x300';
        // 是否开启裁剪
        $isCrop = isset($item[5]) ? 1 : 2;
        // 计算长宽比例
        $cropArr = explode('x', $cropSize);
        // 裁剪比例
        $cropRate = $cropArr[0] / $cropArr[1];
        // 上传后缀
        $albumExts = isset($tag['exts']) ? trim($tag['exts']) : "jpg|png|gif|bmp|jpeg";
        // 上传文件大小
        $albumSize = isset($tag['size']) ? $tag['size'] : 10 * 1024;
        // 组件值
        $albumList = $tag['value'];

        //2022.3.17 新增特殊 name 图片上传带文字描述 在env配置
        $descUploadData = env("DESCUPLOAD.data");
        View::assign("descUploadData",$descUploadData);

        

        //空数组不考虑 只考虑存在且是带文字类型的 则不同格式
        if(in_array($albumName, $descUploadData)){
            View::assign("albumList2", '<?php 
            foreach(' . $albumList . ' as $val){
                echo \'<div class="layui-upload-drag">
                <div class="del_img" onclick="remove_image_\'.$albumName2.\'(this);">
                    <img src="__ADMIN__/assets/images/delete.png">
                </div>
                <a href="\'.$val->img.\'" target="_blank">
                    <img name="img_src_\'.$albumName2.\'" src="\'.$val->img.\'" alt="\'.$albumTitle2.\'(点击放大预览)" title="\'.$albumTitle2.\'(点击放大预览)" width="\'.$albumWidth2.\'" height="\'.$albumHeight2.\'">
                </a>
                <div><input placeholder="此处输入备注" autocomplete="off" class="layui-input" name="\'.$albumName2.\'_desc[]"  style="margin-top:5px" value="\'.$val->desc.\'"/></div>
                </div>\';
            } 
            ?>');
            // 绑定数据源
            View::assign("albumName2", $albumName);
            View::assign("albumWidth2", $sizeArr[0]);
            View::assign("albumHeight2", $sizeArr[1]);
            View::assign("albumTitle2", $albumTitle);
            View::assign("albumExts2", $albumExts);
            View::assign("albumSize2", $albumSize);
            View::assign("albumNum2", $albumNum);
            View::assign("albumTips2", $albumTips);
            View::assign('cropWidth2', $cropArr[0]);
            View::assign('cropHeight2', $cropArr[1]);
            View::assign('cropRate2', "{$cropRate}/1");
            View::assign('isCrop2', $isCrop);
            // 渲染模板
            return View::fetch("widget/upload/album2");

        }else{
            View::assign("albumList", '<?php 
            foreach(' . $albumList . ' as $val){
                echo \'<div class="layui-upload-drag">
                <div class="del_img" onclick="remove_image_\'.$albumName.\'(this);">
                    <img src="__ADMIN__/assets/images/delete.png">
                </div>
                <a href="\'.$val.\'" target="_blank">
                    <img name="img_src_\'.$albumName.\'" src="\'.$val.\'" alt="\'.$albumTitle.\'(点击放大预览)" title="\'.$albumTitle.\'(点击放大预览)" width="\'.$albumWidth.\'" height="\'.$albumHeight.\'">
                </a>
                </div>\';
            } 
            ?>');

            // 绑定数据源
            View::assign("albumName", $albumName);
            View::assign("albumWidth", $sizeArr[0]);
            View::assign("albumHeight", $sizeArr[1]);
            View::assign("albumTitle", $albumTitle);
            View::assign("albumExts", $albumExts);
            View::assign("albumSize", $albumSize);
            View::assign("albumNum", $albumNum);
            View::assign("albumTips", $albumTips);
            View::assign('cropWidth', $cropArr[0]);
            View::assign('cropHeight', $cropArr[1]);
            View::assign('cropRate', "{$cropRate}/1");
            View::assign('isCrop', $isCrop);
            // 渲染模板
            return View::fetch("widget/upload/album");
        }
        
    }



    /**
     * 文章上传
     * @param $tag
     * @return mixed
     * @author 牧羊人
     * @since 2020/9/8
     */
    public function tagFile($tag)
    {
        // 组件名称
        $tagParam = trim($tag['name']);
        $itemArr = explode("|", $tagParam);

        // 组件标识
        $tagName = $itemArr[0];
        // 组件标题
        $fileTitle = isset($itemArr[1]) ? trim($itemArr[1]) : "附件";
        // 允许最大上传数
        $fileLimit = isset($itemArr[2]) ? intval($itemArr[2]) : 5;
        // 允许上传后缀
        $fileExts = isset($itemArr[3]) ? implode("|", explode(",", trim($itemArr[3]))) : "xls|xlsx|doc|docx|ppt|pptx|zip|rar|mp3|txt|pdf|sql|js|css|chm";
        // 允许上传单文件大小
        $fileSize = isset($itemArr[4]) ? $itemArr[4] : 10 * 1024 * 1024;
        // 文件名称
        $fileName = isset($tag['fileName']) ? trim($tag['fileName']) : '';
        // 文件路径
        $filePath = isset($tag['filePath']) ? trim($tag['filePath']) : '';

        // 渲染参数
        View::assign("tagName", $tagName);
        View::assign("fileTitle", $fileTitle);
        View::assign("fileLimit", $fileLimit);
        View::assign("fileExts", $fileExts);
        View::assign("fileSize", $fileSize);
        View::assign("fileName", "<?php echo $fileName?>");
        View::assign("filePath", "<?php echo $filePath?>");

        // 渲染模板
        return View::fetch("widget/upload/file");
    }
}